Make __wrap_iter work with GCC again Summary: This bug was originally fixed in http://reviews.llvm.org/D7201. However it was broken again by the fix to https://llvm.org/bugs/show_bug.cgi?id=22605. This patch re-fixes __wrap_iter with GCC by providing a forward declaration of <vector> before the friend declaration in __wrap_iter. This patch avoids the issues in PR22605 by putting canonical forward declarations in <iosfwd> and including <iosfwd> in <vector>. <iosfwd> was chosen as the canonical forward declaration headers for the following reasons: 1. `<iosfwd>` is small with almost no dependancies. 2. It already forward declares `std::allocator` 3. It is already included in `<iterator>` which we need to fix the GCC bug. This patch fixes the test "gcc_workaround.pass.cpp" Reviewers: mclow.lists, EricWF Subscribers: cfe-commits Differential Revision: http://reviews.llvm.org/D16345 git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@261382 91177308-0d34-0410-b5e6-96231b3b80d8 
diff --git a/include/vector b/include/vector index dbc0dd3..0e41335 100644 --- a/include/vector +++ b/include/vector 
@@ -262,6 +262,7 @@  */    #include <__config> +#include <iosfwd> // for forward declaration of vector  #include <__bit_reference>  #include <type_traits>  #include <climits> @@ -453,7 +454,7 @@  }  }   -template <class _Tp, class _Allocator = allocator<_Tp> > +template <class _Tp, class _Allocator /* = allocator<_Tp> */>  class _LIBCPP_TYPE_VIS_ONLY vector  : private __vector_base<_Tp, _Allocator>  {